/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.beans;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.cip.esymons.eventos.adapaters.RutaCarpetaReporte;
import org.cip.esymons.eventos.bc.CalificacionModuloDelegate;
import org.cip.esymons.eventos.bc.CursoDelegate;
import org.cip.esymons.eventos.bc.EntregaCertificadoDelegate;
import org.cip.esymons.eventos.bc.FormatoCertificadoDelegate;
import org.cip.esymons.eventos.bc.ModuloCursoDelegate;
import org.cip.esymons.eventos.be.AsistenciaAlumno;
import org.cip.esymons.eventos.be.AsistenciaParticipante;
import org.cip.esymons.eventos.be.CalificacionModulo;
import org.cip.esymons.eventos.be.EntregaCertificado;
import org.cip.esymons.eventos.be.FormatoCertificado;
import org.cip.esymons.eventos.be.ModuloCurso;
import org.cip.esymons.eventos.be.Preevento;
import org.cip.esymons.general.util.ControladorAbstracto;

/**
 *
 * @author Lizardo Rios
 */
public class ReporteInfoCipController {

    EntregaCertificadoDelegate delegadoEntregaCertificado;
    CursoDelegate delegadoCurso;
    CalificacionModuloDelegate delegadoCalificacionModulo;
    List<Preevento> listaEvento;
    List<AsistenciaAlumno> listaAsistenciaAlumnos;
    List<AsistenciaParticipante> listaAsistenciaParticipante;
    List<EntregaCertificado> listaEntregaCertificado;
    List<CalificacionModulo> listaNotaxModulo;

    Integer eveCodigo;
    Integer forCodigo;
    Integer modCodigo;
    
    /****************************** Constructor ******************************/
    public ReporteInfoCipController() {
        listaEvento = new ArrayList<Preevento>();
        listaAsistenciaAlumnos = new ArrayList<AsistenciaAlumno>();
        listaAsistenciaParticipante = new ArrayList<AsistenciaParticipante>();
        listaEntregaCertificado= new ArrayList<EntregaCertificado>();
        listaNotaxModulo = new ArrayList<CalificacionModulo>();
    }

    /************************** Setters and Getters **************************/
    public Integer getEveCodigo() {
        return eveCodigo;
    }
    public void setEveCodigo(Integer eveCodigo) {
        this.eveCodigo = eveCodigo;
    }

    public Integer getForCodigo() {
        return forCodigo;
    }

    public void setForCodigo(Integer forCodigo) {
        this.forCodigo = forCodigo;
    }

    public Integer getModCodigo() {
        return modCodigo;
    }
    public void setModCodigo(Integer modCodigo) {
        this.modCodigo = modCodigo;
    }

    

    public List<AsistenciaAlumno> getListaAsistenciaAlumnos() {
        return listaAsistenciaAlumnos;
    }

    public List<AsistenciaParticipante> getListaAsistenciaParticipante() {
        return listaAsistenciaParticipante;
    }

    public void setListaAsistenciaAlumnos(List<AsistenciaAlumno> listaAsistenciaAlumnos) {
        this.listaAsistenciaAlumnos = listaAsistenciaAlumnos;
    }

    public void setListaAsistenciaParticipante(List<AsistenciaParticipante> listaAsistenciaParticipante) {
        this.listaAsistenciaParticipante = listaAsistenciaParticipante;
    }

    public List<EntregaCertificado> getListaEntregaCertificado() {
        return listaEntregaCertificado;
    }

    public void setListaEntregaCertificado(List<EntregaCertificado> listaEntregaCertificado) {
        this.listaEntregaCertificado = listaEntregaCertificado;
    }

    public List<CalificacionModulo> getListaNotaxModulo() {
        return listaNotaxModulo;
    }

    public void setListaNotaxModulo(List<CalificacionModulo> listaNotaxModulo) {
        this.listaNotaxModulo = listaNotaxModulo;
    }


    

    public CursoDelegate getDelegadoCurso() {
        return delegadoCurso;
    }

    public void setDelegadoCurso(CursoDelegate delegadoCurso) {
        this.delegadoCurso = delegadoCurso;
    }


    public EntregaCertificadoDelegate getDelegadoEntregaCertificado() {
        return delegadoEntregaCertificado;
    }

    public List<Preevento> getListaEvento() {
        return listaEvento;
    }
    public void setListaEvento(List<Preevento> listaEvento) {
        this.listaEvento = listaEvento;
    }

    /******************************** Metodos ********************************/
    public String buscarEntregaCertficado() {
        try {
            delegadoEntregaCertificado = new EntregaCertificadoDelegate();
            eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
            forCodigo = (forCodigo == null) ? 0 : forCodigo;
            listaEntregaCertificado = delegadoEntregaCertificado.listarCertificados(eveCodigo, forCodigo);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarEntregaCertificado", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String buscarCertificadosXModulo() {
        try {
            delegadoEntregaCertificado = new EntregaCertificadoDelegate();
            eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
            modCodigo = (modCodigo == null) ? 0 : modCodigo;
            forCodigo = (forCodigo == null) ? 0 : forCodigo;
            listaEntregaCertificado = delegadoEntregaCertificado.listarCertificados(eveCodigo, forCodigo, modCodigo);
            System.out.println("OK");
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarCertificadosXModulo", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return null;
    }

    public String buscarNotasxModulo() {
        try {
            System.out.println("eveCodigo: " + eveCodigo);
            System.out.println("modCodigo: " + modCodigo);
            eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
            modCodigo = (modCodigo == null) ? 0 : modCodigo;
            delegadoCalificacionModulo = new CalificacionModuloDelegate();
            listaNotaxModulo = delegadoCalificacionModulo.listarCalificaciones(eveCodigo, modCodigo);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Error en el método buscarNotasxModulo", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }
    
    public String validarCodigoEvento() {
        eveCodigo = (eveCodigo == null) ? 0 : eveCodigo;
        return null;
    }

    @SuppressWarnings("static-access")
    //exporta reporte de eventos en pdf
    public String exportar() {
        try {
            //capturar parametros
            HttpServletRequest request =  ControladorAbstracto.getRequest();
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";

            rutaJasper = ruta.getRutaJaspers() + "rptFormatoCertificados.jasper";
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRuta() + nombreJasper + ".pdf";    //ruta windows prueba
            rutaPDF = ruta.getRutaPDF() + "rptFormatoCertificados.pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif

            rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);

            File entrada = new File(rutaJasper);
            JasperPrint print;
            if (listaEntregaCertificado.size() > 0) {
                print = JasperFillManager.fillReport(new FileInputStream(entrada), null, new JRBeanCollectionDataSource(listaEntregaCertificado));
                if (ruta.generarPDF(rutaPDF, print)) {}
            }
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al generar el reporte", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public SelectItem[] getComboFormatoCertificados() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            //codigoEvento = 3; //borrar esta linea
            System.out.println("codigoEvento: " + eveCodigo);
            FormatoCertificadoDelegate delegadoFormatoCertificado = new FormatoCertificadoDelegate();
            List<FormatoCertificado> listaFormatos = delegadoFormatoCertificado.listarFormatosXEvento(eveCodigo);
            selects = new SelectItem[listaFormatos.size()];
            int cont = 0;
            for (FormatoCertificado formato : listaFormatos) {
                SelectItem item = new SelectItem(formato.getForCodigo(), formato.getForNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen formatos certificados");
            selects[0] = item;
            return selects;
        }
    }

    public SelectItem[] getComboModulos() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            System.out.println("eveCodigo: " + eveCodigo);
            ModuloCursoDelegate delegadoModuloCurso = new ModuloCursoDelegate();
            //List<ModuloCurso> listaModulos = delegadoModuloCurso.listarModuloXCurso(eveCodigo);
            List<ModuloCurso> listaModulos = delegadoModuloCurso.listarModulo(eveCodigo);
            selects = new SelectItem[listaModulos.size()];
            int cont = 0;
            for (ModuloCurso modulos : listaModulos) {
                SelectItem item = new SelectItem(modulos.getModCodigo(), modulos.getModNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen modulos");
            selects[0] = item;
            return selects;
        }
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }
}
